1919C - Grouping Increases - CodeForces Solution


data structures dp greedy *1400

Please click on ads to support us..

C++ Code:

#include <bits/stdc++.h> 
using namespace std;
typedef long long ll;
 
ll mod = 1e9 + 7;

int returnRes(vector<int> &v) {
	int n = (int)v.size(), res = 0;
	for(int i = 1; i < n; i++) {
		if(v[i] > v[i - 1]) {
			++res;
		}
	}

	return res;
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int tt;
	cin >> tt;
	while(tt--) {
		int n;
		cin >> n;
		vector<int> v(n);
		for(int i = 0; i < n; i++) {
			cin >> v[i];
		}

		if(n < 3) {
			cout << "0\n";
			continue;
		}

		vector<int> a, b;
		a.push_back(0);
		a.push_back(v[0]);
		b.push_back(0);

		for(int i = 1; i < n; i++) {
			if(v[i] <= a.back() && v[i] <= b.back()) {
				if(a.back() < b.back()) {
					a.push_back(v[i]);
				} else {
					b.push_back(v[i]);
				}
			} else if(v[i] <= a.back()) {
				a.push_back(v[i]);
			} else if(v[i] <= b.back()) {
				b.push_back(v[i]);
			} else if(a.back() < b.back()) {
				a.push_back(v[i]);
			} else {
				b.push_back(v[i]);
			}
		}

		int res = returnRes(a) + returnRes(b);
		cout << res - 2 + ((int)b.size() == 1 ? 1 : 0) << "\n";
	}
}


Comments

Submit
0 Comments
More Questions

1517D - Explorer Space
1230B - Ania and Minimizing
1201A - Important Exam
676A - Nicholas and Permutation
431A - Black Square
474B - Worms
987B - High School Become Human
1223A - CME
1658B - Marin and Anti-coprime Permutation
14B - Young Photographer
143A - Help Vasilisa the Wise 2
320A - Magic Numbers
1658A - Marin and Photoshoot
514A - Chewbaсca and Number
382A - Ksenia and Pan Scales
734B - Anton and Digits
1080A - Petya and Origami
1642D - Repetitions Decoding
1440A - Buy the String
1658F - Juju and Binary String
478A - Initial Bet
981A - Antipalindrome
365A - Good Number
1204B - Mislove Has Lost an Array
1409D - Decrease the Sum of Digits
1476E - Pattern Matching
1107A - Digits Sequence Dividing
1348A - Phoenix and Balance
1343B - Balanced Array
1186A - Vus the Cossack and a Contest